Digital video capabilities can be incorporated into a wide range of devices, including digital televisions, digital direct broadcast systems, wireless communication devices, personal digital assistants (PDAs), laptop computers, desktop computers, digital cameras, digital recording devices, cellular or satellite radio telephones, direct two-way communication devices (sometimes referred to as “walkie-talkies”), and the like. Radiotelephones and other communication devices may utilize digital video to support video telephony (VT) and video teleconferencing features.
A number of different video coding standards have been established for coding digital video sequences. The Moving Picture Experts Group (MPEG), for example, has developed a number of standards including MPEG-1, MPEG-2 and MPEG-4. Other video coding standards include the ITU H.263 and ITU H.264 standards developed by the International Telecommunications Union (ITU). In addition, many proprietary video coding standards have also been developed by individual companies, and new proprietary and non-proprietary standards continue to emerge.
Video coding standards generally facilitate the coding of image frames of a video sequence in a manner that compresses the amount of data needed for the image frames. In compliance with the MPEG standards and/or the ITU H.263 and ITU H.264 standards, for example, the coding techniques may utilize similarities between successive video frames, referred to as temporal or inter-frame correlation, in order to achieve inter-frame compression. In addition, video coding techniques may utilize similarities within frames, referred to as spatial or intra-frame correlation, to compress the video frames.
For intra-coding and inter-coding, a video encoder/decoder (CODEC) may operate on blocks of pixels within image frames that define a video sequence. In the MPEG-4 standard, for example, the encoder typically divides a video frame to be transmitted into “macroblocks,” which comprise 16 by 16 pixel arrays. MPEG-4 may also allow for sub-division of the macroblocks into 8 by 8 video blocks. As another example, the ITU H.264 standard supports 16 by 16 video blocks (macroblocks), and allows sub-division into 16 by 8 video blocks, 8 by 16 video blocks, 8 by 8 video blocks, 8 by 4 video blocks, 4 by 8 video blocks and 4 by 4 video blocks.
For inter-coding of a given video block, a CODEC searches similarly sized video blocks of one or more immediately preceding video frames (or subsequent frames) in order to identify the most similar video block, sometimes referred to as the “best prediction.” The process of comparing a current video block to video blocks of other frames is typically referred to as motion estimation. Once a “best prediction” is identified for a video block, the encoder can encode the differences between the current video block and the best prediction via a process referred to as motion compensation. Motion compensation comprises a process of creating a difference block, indicative of the differences between the current video block to be encoded and the best prediction. Motion compensation typically involves fetching the best prediction block using a motion vector, and then subtracting the best prediction from an input block to generate a difference block.
For intra-frame compression, the process of comparing the current video block to other video blocks of the same video frame is typically referred to as intra-prediction (typically spatial estimation or frequency domain estimation). An intra-coding process typically refers to the process of creating a difference block for intra-coded video based on a best prediction found via spatial estimation or frequency domain estimation. Thus, intra-prediction and intra-coding are generally processes for intra-frame compression that are analogous to motion estimation and motion compensation of inter-frame compression.
After motion compensation or intra-coding has created the difference block, a series of additional encoding steps are typically performed to encode and compress the difference block even further. These additional encoding steps may depend on the encoding standard being used. For example, the additional encoding steps may include an 8×8 discrete cosine transform, followed by scalar quantization, followed by a raster-to-zigzag reordering, followed by run-length encoding, followed by Huffman encoding. De-block filtering may also be performed in order to remove blockiness artifacts that can manifest between video blocks of an image frame.